文章目录
  1. 1. 前言  
  2. 2. 简介
  3. 3. 设置
  4. 4. Json数据
  5. 5. 注册deviceToken
  6. 6. 推送调用

前言  

我在上一篇文章中介绍了传统的APNS推送的原理和配置,以及调用的方法。使用传统的APNS推送最大的限制就是字节数的限制,payload最大不能超过256 bytes。而有时往往我们需要更多的信息推送,这时我们就需要用到silent APNS

简介

silent APNS是iOS 7新加的一个非常好的特性,和以往传统的APNS最大的不同是,当一个silent APNS推送到设备时,iOS系统并不会用弹出框提示内容,也不会听到声音,看到图标上的badge,用户不会知道任何事情。而silent APNS与传统的APNS相同的是,当推送到设备时,如果App处于激活状态则会调用到相同的系统方法,来让App获取到推送的信息,然后我们可以在App中发起HTTP请求,获取我们想要的数据,之后再展示给用户。

设置

silent APNS和传统的APNS对于证书,签名的设置都是一样的。我们需要在Xcode设置UIBackgroundModes.

1
2
3
4
<key>UIBackgroundModes</key>
<array>
<string>remote-notification</string>
</array>

Xcode设置图:

Json数据

我们在传统的APNS中想要收到的消息是以JSON格式提供的,类似于下面这样:

1
2
3
4
5
6
7
{
"aps":{
"alert": "Hello, world!",
"sound": "default"
"badge": "2"
}
}

而在silent APNS中我们需要设置推送的payload为下面的JSON格式

1
2
3
4
5
6
{
"aps":{
content-available: 1
"alert": {...}
}
}

注册deviceToken

我们在上一节中已经清楚讲了在我们的项目中添加注册设备的deviceToken,获取deviceToken的方法,而关于silent APNS最大的不同之处是我们需要注册的类型不同.

在传统的APNS中,我们使用注册UIRemoteNotificationTypeAlert, UIRemoteNotificationTypeBadge, UIRemoteNotificationTypeSound

1
2
3
4
5
 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

[application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert |UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound)];
}

而在silent APNS中,我们需要多注册一个UIRemoteNotificationTypeNewsstandContentAvailability类型

1
2
3
4
5
6
7
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeNewsstandContentAvailability|
UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert)];
}

推送调用

APNS消息推送过来的时候,传统的APNS会直接使用声音、弹出框等提示用户,通过点击消息就可以触发下面的方法,而在silent APNS中,当推送到达设备时,如果App处于激活状态,则会自动调用下面的方法:

1
2
3
-(void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo fetchComplet    ionHandler:(void (^)		(UIBackgroundFetchResult))completionHandler{
NSLog(@"Received notification: %@", userInfo);
}

我们在silent APNS中需要做的就是通过在上面的回调方法中加入自己的逻辑,譬如根据推送过来的信息发起HTTP请求,获取更多想要展示的数据,然后再利用localNotification或者是其他手段将信息展示给用户,就可以很好的通过Apple推送通知来增强用户体验。

文章目录
  1. 1. 前言  
  2. 2. 简介
  3. 3. 设置
  4. 4. Json数据
  5. 5. 注册deviceToken
  6. 6. 推送调用